package br.ugf.projeto.main;

import br.ugf.projeto.util.PropertiesHandler;
import jade.core.Profile;
import jade.core.ProfileImpl;
import jade.core.Runtime;
import jade.wrapper.AgentController;
import jade.wrapper.ContainerController;

/**
 * <p>
 * </p>
 * 
 * @author Rodrigo Souza, Alexandre Zulu, Fabio Girotto
 * @version 1.0 Created on 05/04/2008
 */
public class Gerenciador
{

	/**
	 * <p>
	 * </p>
	 * 
	 * @param args
	 */
	public static void main( final String[] args )
	{
		// Configura o arquivo de propriedades
		PropertiesHandler.setResourceBundle( "config" );

		// Retrieve the singleton instance of the JADE Runtime
		Runtime runtime = Runtime.instance();

		// Create a container to host the agents
		Profile profile = new ProfileImpl();
		profile.setParameter( Profile.MAIN_HOST, PropertiesHandler.getString( "CONFIG.HOST" ) );
		profile.setParameter( Profile.MAIN_PORT, PropertiesHandler.getString( "CONFIG.PORT" ) );
		ContainerController container;
		container = runtime.createAgentContainer( profile );
		// container = runtime.createMainContainer( profile );

		final String[] ARGS_FORNECEDOR_METALURGICA1 = PropertiesHandler.getStringArray( "GERENCIADOR.ARGS_FORNECEDOR_METALURGICA1" );
		
		final String[] ARGS_FORNECEDOR_METALURGICA2 = PropertiesHandler.getStringArray( "GERENCIADOR.ARGS_FORNECEDOR_METALURGICA2" );

		final String[] ARGS_FORNECEDOR_VIDROS = PropertiesHandler.getStringArray( "GERENCIADOR.ARGS_FORNECEDOR_VIDROS" );

		final String[] ARGS_FORNECEDOR_VIDROS2 = PropertiesHandler.getStringArray( "GERENCIADOR.ARGS_FORNECEDOR_VIDROS2" );

		final String[] ARGS_GOODYEAR = PropertiesHandler.getStringArray( "GERENCIADOR.ARGS_FORNECEDOR_VIDROS2" );

		final String[] ARGS_MICHELIN = PropertiesHandler.getStringArray( "GERENCIADOR.ARGS_MICHELIN" );

		final String[] ARGS_MONTADORA = PropertiesHandler.getStringArray( "GERENCIADOR.ARGS_MONTADORA" );

		final String[] ARGS_PIRELLI = PropertiesHandler.getStringArray( "GERENCIADOR.ARGS_PIRELLI" );
		
		final String[] ARGS_CHENGCHONG = PropertiesHandler.getStringArray( "GERENCIADOR.ARGS_CHENGCHONG" );

		// Testa para ver se algum Container foi criado
		if ( container != null )
		{
			try
			{
				AgentController agentMontadora;
				AgentController agentConcessionariaTijuca;
				AgentController agentConcessionariaBarra;
				AgentController agentMetalurgica2;
				AgentController agentMetalurgica1;
				AgentController agentFornecedorVidro;
				AgentController agentFornecedorVidro2;
				AgentController agentMichelin;
				AgentController agentPirelli;
				AgentController agentGoodyear;
				AgentController agentChengChong;
				
				int containerNumber = Integer.parseInt( PropertiesHandler.getString( "CONFIG.CONTAINER_NUMBER" ) );
				switch ( containerNumber )
				{
					case 1 :
						
						//Agente Montadora
						agentMontadora = container.createNewAgent(
								"Montadora",
								"br.ugf.projeto.agentes.impl.Montadora",
								ARGS_MONTADORA );
						agentMontadora.start();
							
							
						//Agente Concessionaria Tijuca
						agentConcessionariaTijuca = container.createNewAgent(
								"Concessionaria Tijuca",
								"br.ugf.projeto.agentes.impl.Concessionaria",
								null );
						agentConcessionariaTijuca.start();
						
						
						// Agente fornecedor de Pneus
						agentChengChong = container.createNewAgent(
							"ChengChong",
							"br.ugf.projeto.agentes.Fornecedor",
							ARGS_CHENGCHONG );
						agentChengChong.start();
						
						//Agente Metalurgica 1
						agentMetalurgica1 = container.createNewAgent(
								"Metalurgica1",
								"br.ugf.projeto.agentes.Fornecedor",
								ARGS_FORNECEDOR_METALURGICA1 );
						agentMetalurgica1.start();
						
						
						//Agente Fornecedor de Vidro
						agentFornecedorVidro = container.createNewAgent(
								"Vidros Automotivos",
								"br.ugf.projeto.agentes.Fornecedor",
								ARGS_FORNECEDOR_VIDROS );
						agentFornecedorVidro.start();
																																
						break;
					case 2 :
						
						//Agente Metalurgica 2
						agentMetalurgica2 = container.createNewAgent(
								"Metalurgica2",
								"br.ugf.projeto.agentes.Fornecedor",
								ARGS_FORNECEDOR_METALURGICA2 );
						agentMetalurgica2.start();
						
																	
						agentFornecedorVidro2 = container.createNewAgent(
							"AutoVidros",
							"br.ugf.projeto.agentes.Fornecedor",
							ARGS_FORNECEDOR_VIDROS2 );
						agentFornecedorVidro2.start();

						
						// Agente fornecedor de Pneus
						agentMichelin = container.createNewAgent(
							"Michelin",
							"br.ugf.projeto.agentes.Fornecedor",
							ARGS_MICHELIN );
						agentMichelin.start();

						
						// Agente fornecedor de Pneus
						agentPirelli = container.createNewAgent(
							"Pirelli",
							"br.ugf.projeto.agentes.Fornecedor",
							ARGS_PIRELLI );
						agentPirelli.start();

						
						// Agente fornecedor de Pneus
						agentGoodyear = container.createNewAgent(
							"Goodyear",
							"br.ugf.projeto.agentes.Fornecedor",
							ARGS_GOODYEAR );
						agentGoodyear.start();
						
						
						//Agente Concessionaria Tijuca
						agentConcessionariaBarra = container.createNewAgent(
							"Concessionaria Barra",
							"br.ugf.projeto.agentes.impl.Concessionaria",
							null );
						agentConcessionariaBarra.start();

																		
						break;
					default :
												
						//Agente Montadora
						agentMontadora = container.createNewAgent(
								"Montadora",
								"br.ugf.projeto.agentes.impl.Montadora",
								ARGS_MONTADORA );
						agentMontadora.start();
																
											
						//Agente Concessionaria Barra 
						agentConcessionariaBarra = container.createNewAgent(
							"Concessionaria Barra",
							"br.ugf.projeto.agentes.impl.Concessionaria",
							null );
						agentConcessionariaBarra.start();
						
						
						//Agente Concessionaria Tijuca
						agentConcessionariaTijuca = container.createNewAgent(
							"Concessionaria Tijuca",
							"br.ugf.projeto.agentes.impl.Concessionaria",
							null );
						agentConcessionariaTijuca.start();
						
												
						//Agente Metalurgica Resende
						agentMetalurgica1 = container.createNewAgent(
							"Metalurgica1",
							"br.ugf.projeto.agentes.Fornecedor",
							ARGS_FORNECEDOR_METALURGICA1 );
						agentMetalurgica1.start();
						
						
						//Agente Metalurgica Petropolis	
						agentMetalurgica2 = container.createNewAgent(
							"Metalurgica2",
							"br.ugf.projeto.agentes.Fornecedor",
							ARGS_FORNECEDOR_METALURGICA2 );
						agentMetalurgica2.start();

						
						//Agente Fornecedor de Vidro 1
						agentFornecedorVidro = container.createNewAgent(
							"Vidros Automotivos",
							"br.ugf.projeto.agentes.Fornecedor",
							ARGS_FORNECEDOR_VIDROS );
						agentFornecedorVidro.start();

						
						//Agente Fornecedor de Vidro 2
						agentFornecedorVidro2 = container.createNewAgent(
							"AutoVidros",
							"br.ugf.projeto.agentes.Fornecedor",
							ARGS_FORNECEDOR_VIDROS2 );
						agentFornecedorVidro2.start();

						
						// Agente fornecedor de Pneus
						agentMichelin = container.createNewAgent(
							"Michelin",
							"br.ugf.projeto.agentes.Fornecedor",
							ARGS_MICHELIN );
						agentMichelin.start();

						
						// Agente fornecedor de Pneus
						agentPirelli = container.createNewAgent(
							"Pirelli",
							"br.ugf.projeto.agentes.Fornecedor",
							ARGS_PIRELLI );
						agentPirelli.start();

						
						// Agente fornecedor de Pneus
						agentGoodyear = container.createNewAgent(
							"Goodyear",
							"br.ugf.projeto.agentes.Fornecedor",
							ARGS_GOODYEAR );
						agentGoodyear.start();
						
						break;
				}
			}
			catch ( Exception e )
			{
				e.printStackTrace();
			}
		}
		else
		{
			System.err.println( "Nenhum Container JADE foi encontrado/criado" );
		}

	}
}
